#ifndef __MY_UTIL__
#define __MY_UTIL__

/* 实用类的设计
    1.获取系统时间
    2.判断文件是否存在
    3.获取文件所在的目录路径
    4.创建目录
*/

#include <iostream>
#include <string>
#include <ctime>
#include <sys/stat.h>
// #include <unistd.h> //只能在 Linux 中使用
namespace Yohifo
{
    namespace Util
    {
        class Date
        {
        public:
            // 获取系统时间
            static time_t getTime()
            {
                return time(nullptr);
            }
        };

        class File
        {
        public:
            // 判断文件是否存在
            static bool exist(const std::string &pathname)
            {
                // return access(pathname.c_str(), F_OK);  //只能在 Linux 中使用

                struct stat st;
                if (stat(pathname.c_str(), &st) < 0)
                {
                    return false;
                }

                return true;
            }

            // 获取文件所在的目录路径
            static std::string path(const std::string &pathname)
            {
                size_t pos = pathname.find_last_of("/\\"); // 查找最后一个分隔符下标
                if (pos == std::string::npos)
                    return "./"; // 当前目录路径

                return pathname.substr(0, pos + 1); // 目标目录路径
            }

            // 创建目录
            static void createDirectory(const std::string &path)
            {
                // ./aba/efg/lmn
                size_t pos = 0;
                size_t idx = 0;
                mode_t mode = 0777; // 目录权限

                while (idx < path.size())
                {
                    pos = path.find_first_of("/\\", idx); // 从指定位置处，截取目录文件

                    // 最终的目录
                    if (pos == std::string::npos)
                        mkdir(path.c_str(), mode);

                    // 父级目录
                    std::string parentPath = path.substr(0, pos + 1);

                    // 判断父级目录是否存在
                    if (exist(parentPath))
                    {
                        idx = pos + 1;
                        continue;
                    }

                    // 正常创建
                    mkdir(parentPath.c_str(), mode);
                    idx = pos + 1;
                }
            }
        };
    }
}

#endif